From e245cec21f29fd649fb5c363d197012cdd5992f6 Mon Sep 17 00:00:00 2001 From: Koos85 Date: Thu, 24 Sep 2020 20:10:27 +0200 Subject: [PATCH] work on grammar test --- itest/querygenerator/_test_grammar2.py | 191 ---------------- itest/querygenerator/_validate.py | 299 ------------------------- itest/querygenerator/k_map.py | 29 ++- itest/querygenerator/querygenerator.py | 89 +------- itest/test_grammar.py | 79 ++++++- itest/testing/constants.py | 1 + 6 files changed, 100 insertions(+), 588 deletions(-) delete mode 100644 itest/querygenerator/_test_grammar2.py delete mode 100644 itest/querygenerator/_validate.py diff --git a/itest/querygenerator/_test_grammar2.py b/itest/querygenerator/_test_grammar2.py deleted file mode 100644 index cf4a2840..00000000 --- a/itest/querygenerator/_test_grammar2.py +++ /dev/null @@ -1,191 +0,0 @@ -# import re -# import random -# import asyncio -# import functools -# import random -# import time -# import os -# import sys -# from testing import Client -# from testing import default_test_setup -# from testing import gen_data -# from testing import gen_points -# from testing import gen_series -# from testing import InsertError -# from testing import PoolError -# from testing import QueryError -# from testing import run_test -# from testing import Series -# from testing import Server -# from testing import ServerError -# from testing import SiriDB -# from testing import TestBase -# from testing import UserAuthError -# from querybouwer.querybouwer import Querybouwer -# from querybouwer.k_map import k_map -# #from querybouwer.validate import SiriRipOff, compare_result -# from cmath import isfinite -# from math import nan - -# from testing.constants import SIRIDBC -# print(SIRIDBC) -# sys.path.append('../grammar/')#os.path.join(SIRIDBC, '/grammar')) -# from pygrammar.grammar import SiriGrammar - - -# M, N = 20, 70 -# #DATA = {str(a).zfill(6): [[b, random.randint(0, 20)] for b in range(N)] for a in range(M)} -# DATA = {str(a).zfill(6): [[b*N+a, random.randint(0, 20)] for b in range(N)] for a in range(M)} -# #DATA = {str(a).zfill(6): [[b, nan if b > 15 else float(random.randint(0, 20))] for b in range(N)] for a in range(M)} - -# #client_validate = SiriRipOff() -# #client_validate.groups = {'GROUP': re.compile('.*')} -# #client_validate.update(DATA) - - -# class TestGrammar(TestBase): -# title = 'Test select' - -# async def test_main(self): -# qb = Querybouwer(SiriGrammar, {'regex_map': k_map, -# 'max_list_n_map': { -# 'series_match': 1, -# 'aggregate_functions': 1, -# 'select_aggregate': 1 -# }, -# #'default_list_n': 2, -# 'replace_map': { -# 'k_prefix': '', -# 'k_suffix': '', -# 'k_where': '', -# 'after_expr': '', -# 'before_expr': '', -# 'between_expr': '', -# 'k_merge': '', -# 'r_singleq_str': '', - -# #'f_median': '', -# #'f_median_low': '', -# #'f_median_high': '', -# 'k_now': '', -# 'r_float': '', -# 'r_time_str': '', -# #'r_grave_str': '', -# #'f_filter': '', -# } -# }) - -# for q in qb.generate_queries('select_stmt'): -# #if '~' in q: continue -# #if 'between now' in q: continue -# #if "000000" in q or '1970' in q or '*' in q or '==' in q or '>=' in q or '<' in q: continue - -# #if 'filter' in q and 'derivative' in q.split('filter', 1)[0]: continue -# q = ' suffix "a", '.join(q.split(' , ', 1)) -# #a, b = q.split(' , ', 1) -# #q = a + ' suffix "b",'+b - -# #q = 'select * from /.*/ '+q -# try: -# res0 = await self.client0.query(q) -# except: -# pass -# #res1 = client_validate.query(q) -# #self.assertFalse(compare_result(res0, res1)) - -# async def test_where(self): -# qb = Querybouwer(SiriGrammar, {'regex_map': k_map, -# 'max_list_n_map': { -# 'series_match': 1, -# 'aggregate_functions': 1}, -# 'replace_map': { -# 'k_prefix': '', -# 'k_suffix': 'suffix', -# #'k_where': '', -# 'after_expr': '', -# 'before_expr': '', -# 'between_expr': '', -# 'k_merge': '', -# 'r_singleq_str': '', -# } -# }) -# for q in qb.generate_queries('select_stmt'): -# if '~' in q: continue -# if 'between now' in q: continue -# print(q) -# res0 = await self.client0.query(q) -# #res1 = client_validate.query(q) -# #self.assertFalse(compare_result(res0, res1)) - -# async def test_between(self): -# qb = Querybouwer(SiriGrammar, {'regex_map': k_map, -# 'max_list_n_map': { -# 'series_match': 1, -# 'aggregate_functions': 1}, -# 'replace_map': { -# 'k_prefix': '', -# 'k_suffix': '', -# 'k_where': '', -# 'after_expr': '', -# 'before_expr': '', -# #'between_expr': '', -# 'k_merge': '', -# 'r_singleq_str': '', -# } -# }) -# for q in qb.generate_queries('select_stmt'): -# if '~' in q: continue -# if 'between now' in q: continue -# print(q) -# res = await self.client0.query(q) -# #self.assertFalse(validate_query_result(q, res)) - -# async def test_merge(self): -# qb = Querybouwer(SiriGrammar, {'regex_map': k_map, -# 'max_list_n_map': { -# 'series_match': 1, -# 'aggregate_functions': 1}, -# 'replace_map': { -# 'k_prefix': '', -# 'k_suffix': '', -# 'k_where': '', -# 'after_expr': '', -# 'before_expr': '', -# 'between_expr': '', -# #'k_merge': '', -# 'r_singleq_str': '', -# } -# }) -# for q in qb.generate_queries('select_stmt'): -# if '~' in q: continue -# if 'between now' in q: continue -# print(q) -# res = await self.client0.query(q) - - -# @default_test_setup(1) -# async def run(self): -# await self.client0.connect() - -# for k, v in sorted(DATA.items()): -# await self.client0.insert({k: v}) -# await self.client0.query('create group `GROUP` for /.*/') -# #time.sleep(2) - -# await self.test_main() -# #await self.test_where() -# #await self.test_between() -# #await self.test_merge() - -# self.client0.close() - -# return False - - -# if __name__ == '__main__': -# SiriDB.LOG_LEVEL = 'CRITICAL' -# Server.HOLD_TERM = True -# Server.MEM_CHECK = True -# Server.BUILDTYPE = 'Debug' -# run_test(TestAll()) -# #run_test(TestSelect()) diff --git a/itest/querygenerator/_validate.py b/itest/querygenerator/_validate.py deleted file mode 100644 index b59c5890..00000000 --- a/itest/querygenerator/_validate.py +++ /dev/null @@ -1,299 +0,0 @@ -# import sys -# from _collections import defaultdict -# from statistics import mean, median, median_low, median_high, variance, pvariance -# from datetime import datetime -# from numpy import nan, inf, isnan, isfinite -# import time -# import re -# sys.path.append('../grammar') -# from pygrammar.grammar import SiriGrammar # nopep8 -# # import decimal -# # getcontext().prec = 12 -# PRECISION = 9 - -# expr_map = { -# '==': lambda a, b: a==b, -# '!=': lambda a, b: a!=b, -# '<=': lambda a, b: a<=b, -# '>=': lambda a, b: a>=b, -# '<': lambda a, b: a': lambda a, b: a>b, -# '!~': lambda a, b: True, -# '~': lambda a, b: True, -# } -# prop_map = { -# 'length': lambda k, v: len(v), -# 'pool': lambda k, v: False, -# 'name': lambda k, v: k, -# 'start': lambda k, v: v[0][0], -# 'end': lambda k, v: v[-1][0], -# 'type': lambda k, v: 'integer' if type(v[0][1])==int else 'float', -# } -# setop_map = { -# 'k_union': lambda a, b: a | b, -# 'c_difference': lambda a, b: a - b, -# 'k_symmetric_difference': lambda a, b: a ^ b, -# 'k_intersection': lambda a, b: a & b, -# } - -# seconds_map = {'s': 1, 'm': 60, 'h': 3600, 'd': 86400, 'w': 604800} - - -# def difference(pts, ts): -# if ts: -# return [[t, 0 if len(v)==1 else v[-1]-v[0]] for t, v in sorted(binfun(pts, ts[0]))]#KLOPT DIT? (nan-nan) 0 if len(v)==1 else -# else: -# return [[t, v1-v0] for (_, v0), (t, v1) in zip(pts[:-1], pts[1:])] - - -# def derivative(pts, ts): -# ts = (ts[0] if ts else 1) -# return [[t1, inf if (t0==t1 and (v1-v0)>0) else \ -# -inf if (t0==t1 and (v1-v0)<0) else \ -# nan if t0==t1 else \ -# ts*(v1-v0)/(t1-t0)#round(ts*(v1-v0)/(t1-t0), PRECISION) -# ] for (t0, v0), (t1, v1) in zip(pts[:-1], pts[1:])] - - -# def pvariance_(vs): -# nans = [a for a in vs if not isfinite(a)] -# return nan if nans else 0 if len(vs) == 1 else pvariance(vs) - - -# def binfun(pts, size): -# bins = defaultdict(list) -# for t, v in pts: -# bins[(t-1)//size*size+size].append(v) -# return bins.items() - - -# def binfunmerge(series, size): -# bins = defaultdict(list) -# for _, pts in sorted(series.items(), reverse=True): -# for t, v in pts: -# bins[(t-1)//size*size+size].append(v) -# return bins.items() - - -# def mergefun(series): -# return sorted([tv for _, pts in sorted(series.items(), reverse=True) for tv in pts], key=lambda a: a[0]) - -# funmap = { -# 'f_points': lambda pts, ts: pts, -# 'f_sum': lambda pts, ts: sorted([t, sum(v)] for t, v in binfun(pts, ts[0])), -# 'f_mean': lambda pts, ts: sorted([t, mean(v)] for t, v in binfun(pts, ts[0])), -# 'f_median': lambda pts, ts: sorted([t, median(v)] for t, v in binfun(pts, ts[0])), -# 'f_median_low': lambda pts, ts: sorted([t, median_low(v)] for t, v in binfun(pts, ts[0])), -# 'f_median_high': lambda pts, ts: sorted([t, median_high(v)] for t, v in binfun(pts, ts[0])), -# 'f_min': lambda pts, ts: sorted([t, min(v)] for t, v in binfun(pts, ts[0])), -# 'f_max': lambda pts, ts: sorted([t, max(v)] for t, v in binfun(pts, ts[0])), -# 'f_count': lambda pts, ts: sorted([t, len(v)] for t, v in binfun(pts, ts[0])), -# 'f_variance': lambda pts, ts: sorted([t, 0 if len(v) ==1 else variance(v)] for t, v in binfun(pts, ts[0])), -# 'f_pvariance': lambda pts, ts: sorted([t, pvariance_(v)] for t, v in binfun(pts, ts[0])), -# 'f_difference': difference, -# 'f_derivative': derivative, -# 'f_filter': lambda pts, ts: [tv for tv in pts if ts[0](tv[1], ts[1])],#round(tv[1], 6) -# } - -# funmapmerge = { -# 'f_points': lambda series, ts: mergefun(series), -# 'f_sum': lambda series, ts: sorted([t, sum(v)] for t, v in binfunmerge(series, ts[0])), -# 'f_mean': lambda series, ts: sorted([t, mean(v)] for t, v in binfunmerge(series, ts[0])), -# 'f_median': lambda series, ts: sorted([t, median(v)] for t, v in binfunmerge(series, ts[0])), -# 'f_median_low': lambda series, ts: sorted([t, median_low(v)] for t, v in binfunmerge(series, ts[0])), -# 'f_median_high': lambda series, ts: sorted([t, median_high(v)] for t, v in binfunmerge(series, ts[0])), -# 'f_min': lambda series, ts: sorted([t, min(v)] for t, v in binfunmerge(series, ts[0])), -# 'f_max': lambda series, ts: sorted([t, max(v)] for t, v in binfunmerge(series, ts[0])), -# 'f_count': lambda series, ts: sorted([t, len(v)] for t, v in binfunmerge(series, ts[0])), -# 'f_variance': lambda series, ts: sorted([t, round(variance(v), PRECISION) if len(v) > 1 else 0] for t, v in binfunmerge(series, ts[0])), -# 'f_pvariance': lambda series, ts: sorted([t, round(pvariance(v), PRECISION) if len(v) > 1 else 0] for t, v in binfunmerge(series, ts[0])), -# 'f_difference': lambda series, ts: difference(mergefun(series), ts), -# 'f_derivative': lambda series, ts: derivative(mergefun(series), ts), -# 'f_filter': lambda series, ts: [tv for tv in mergefun(series) if ts[0](tv[1], ts[1])], -# } - - -# class SiriRipOff(dict): -# groups = {} - -# def _time_expr(self, e): -# for e1 in e.children: -# if e1.children[0].element.name == 'r_integer': -# return int(e1.string) -# elif e1.children[0].element.name == 'r_time_str': -# return int(e1.string[:-1])*seconds_map[e1.string[-1:]] -# elif e1.children[0].element.name == 'k_now': -# return int(time.time()) -# else: -# alist = e1.string[1:-1].split() -# Y, M, D = map(int, alist[0].split('-')) -# if len(alist) == 2: -# h, m, s = map(int, (alist[1]+':0:0').split(':')[:3]) -# dt = datetime(Y, M, D, h, m, s) -# else: -# dt = datetime(Y, M, D) -# return int(time.mktime(dt.timetuple())) - -# def _aggrfun(self, e): -# ename = getattr(e.element, 'name', None) -# texprs = [] -# if ename == 'f_filter': -# oname = e.children[2].children[0].element.name -# op = expr_map[e.children[2].string] if oname == 'str_operator' else expr_map['=='] -# for e1 in e.children[-2].children: -# if getattr(e1.element, 'name', None) == 'r_integer': -# val = int(e1.string) -# elif getattr(e1.element, 'name', None) == 'r_float': -# val = float(e1.string) -# else: -# assert 0 -# texprs = [op, val] -# else: -# for e1 in e.children: -# if getattr(e1.element, 'name', None) == 'time_expr': -# texprs.append(self._time_expr(e1)) -# else: -# for e2 in e1.children: -# if getattr(e2.element, 'name', None) == 'time_expr': -# texprs.append(self._time_expr(e2)) - -# return ename, texprs - -# def _from(self, e): -# seriessets = [] -# operators = [] -# for e1 in [a.children[0] for a in e.children]: -# ename = getattr(e1.element, 'name', None) -# if ename == 'series_name': -# seriessets.append({e1.string[1:-1]} if e1.string[1:-1] in self else set()) -# elif ename == 'series_re': -# r = re.compile(e1.string[1:-1]) -# seriessets.append({name for name in self if r.match(name)}) -# elif ename == 'group_match': -# r = self.groups[e1.string[1:-1]] -# seriessets.append({name for name in self if r.match(name)}) -# else: -# operators.append(setop_map[ename]) - -# _series = seriessets[0] -# for s, o in zip(seriessets[1:], operators): -# _series = o(_series, s) -# return _series - -# def _where(self, e): -# wfun = [] -# for e1 in e.children[0].children[1].children[0].children: -# prop, exp, val = e1.children -# vtyp = getattr(val.element, 'name', None) -# if vtyp == 'string': -# val = val.string[1:-1] -# elif vtyp == 'int_expr': -# val = int(val.string) -# elif vtyp == 'time_expr': -# val = self._time_expr(val) -# else: -# val = val.string - -# wfun.append(lambda k, v: expr_map[exp.string](prop_map[prop.string](k, v), val)) - -# return lambda k, v: sum(fun(k, v) for fun in wfun)==len(wfun) - -# def _aggr(self, e): -# aggr = [] -# for i, e1 in enumerate(e.children): -# if i%2==1: continue -# _prefix = '' -# _suffix = '' -# _aggrfuns = [] -# for i, e2 in enumerate(e1.children[0].children): -# if i%2==1: continue -# fun, ts = self._aggrfun(e2.children[0]) -# _aggrfuns.append([fun, ts]) - -# for e2 in e1.children[1:]: -# if e2.children[0].element.name == 'prefix_expr': -# _prefix = e2.children[0].children[1].string[1:-1] -# elif e1.children[0].element.name == 'suffix_expr': -# _suffix = e2.children[0].children[1].string[1:-1] -# aggr.append([_aggrfuns, _prefix, _suffix]) -# return aggr - -# def _merge(self, e): -# mergeas = e.children[0].children[2].string[1:-1] -# _aggrfuns = [] -# if e.children[0].children[-1].children[0].children: -# for i, e1 in enumerate(e.children[0].children[-1].children[0].children[1].children): -# if i%2==1: continue -# fun, ts = self._aggrfun(e1.children[0]) -# _aggrfuns.append([fun, ts]) -# return mergeas, _aggrfuns or [['f_points', None]] - - -# def select_stmt(self, e): -# aggr = self._aggr(e.children[1]) -# names = self._from(e.children[3]) -# wfun, merge, after, before = None, None, None, None -# for e1 in e.children[4:]: -# lname = getattr(e1.children[0].children[0].element, 'name', None) -# if lname == 'k_where': -# wfun = self._where(e1) -# elif lname == 'k_merge': -# merge = self._merge(e1) -# elif lname == 'after_expr': -# after = self._time_expr(e1.children[0].children[0].children[1]) -# elif lname == 'before_expr': -# before = self._time_expr(e1.children[0].children[0].children[1]) -# elif lname == 'between_expr': -# after = self._time_expr(e1.children[0].children[0].children[1]) -# before = self._time_expr(e1.children[0].children[0].children[3]) - -# series = {} -# for name in names: -# pts = self[name] -# if wfun and not wfun(name, pts): continue -# if after is not None and before: -# pts = [[t, v] for t, v in pts if after <= t < before] -# elif after is not None: -# pts = [[t, v] for t, v in pts if after <= t] -# elif before is not None: -# pts = [[t, v] for t, v in pts if t < before] - -# for aggrs, prefix, suffix in aggr: -# for funname, ts in aggrs: -# pts = funmap[funname](pts, ts) -# series[prefix+name+suffix] = pts - -# lname = getattr(e.children[-1].children[0].element, 'name', None) -# if merge: -# mergeas, aggrs = merge -# for funname, ts in aggrs[:1]: -# pts = funmapmerge[funname](series, ts) -# for funname, ts in aggrs[1:]: -# pts = funmap[funname](pts, ts) - -# return {mergeas: pts} - -# return series - -# def query(self, q): -# res = siri_grammar.parse(q) -# for e in res.tree.children[0].children[0].children[0].children: -# ename = getattr(e.element, 'name', None) -# return getattr(self, ename)(e) - - -# def compare_result(res0, res1): -# if res0.keys()!=res1.keys(): -# return True - -# for k, v in res0.items(): -# v_val = res1[k] -# if v == v_val: continue -# n_ok = sum(v0==v1 or round(v0-v1, 3)==0 or (isnan(v0) and isnan(v1)) for (t0, v0), (t1, v1) in zip(v, v_val)) -# if n_ok == len(v) == len(v_val): continue -# print(n_ok) -# print('s', len(v), v) -# print('k', len(v_val), v_val) -# print(len(v), len(v_val)) -# return True -# return False \ No newline at end of file diff --git a/itest/querygenerator/k_map.py b/itest/querygenerator/k_map.py index eec7c808..df1ec550 100644 --- a/itest/querygenerator/k_map.py +++ b/itest/querygenerator/k_map.py @@ -1,6 +1,3 @@ -max_repeat_n_map = {} -replace_map = {'r_singleq_str': ''} -max_list_n_map = {'series_match': 2, 'aggregate_functions': 2} k_map = { 'r_doubleq_str': { 'k_as': '"MERGED"', @@ -25,9 +22,13 @@ k_map = { 'k_ip_support': '"ALL"', 'k_libuv': '"1.8.0"', 'k_server': '"SERVER"', + 'k_tee_pipe_name': '"PIPENAME"', + 'k_shard_duration': 86400, + 'k_expiration_num': 0, + 'k_expiration_log': 0, 'aggregate_functions': '"1970-1-1 1:00:10"', - 'k_start': '"1970-1-1 1:00:00"', + 'k_start': '"1970-1-1 1:00:00"', 'k_after': '"1970-1-1 1:00:00"', 'k_between': '"1970-1-1 1:00:00"', 'k_before': '"1970-1-1 1:01:00"', @@ -59,6 +60,9 @@ k_map = { 'k_before': 60, 'k_and': 60, 'k_end': 60, + 'k_shard_duration': 86400, + 'k_expiration_num': 0, + 'k_expiration_log': 0, }, 'r_float': { 'k_filter': 10.0, @@ -70,13 +74,24 @@ k_map = { 'k_between': '0d', 'k_before': '1m', 'k_and': '1m', - 'k_end': '1m'}, + 'k_end': '1m', + 'k_shard_duration': '1d', + 'k_expiration_num': '0d', + 'k_expiration_log': '0d', + }, 'r_uuid_str': { 'r_uuid_str': '"UUID"'}, 'r_uinteger': { }, - 'r_grave_str': {'r_grave_str': '`000000`'}, + 'r_grave_str': { + 'group_name': '`GROUP`', + 'tag_name': '`TAG`', + 'group_tag_match': '`GROUP_OR_TAG`', + }, 'r_regex': { 'r_regex': '/.*/' }, -} + 'r_comment': { + 'r_comment': '#', + }, +} \ No newline at end of file diff --git a/itest/querygenerator/querygenerator.py b/itest/querygenerator/querygenerator.py index be0a8189..d21e8434 100644 --- a/itest/querygenerator/querygenerator.py +++ b/itest/querygenerator/querygenerator.py @@ -34,7 +34,8 @@ class QueryGenerator(list): break self.append(ename) - for q1 in getattr(self, '_on_'+e.__class__.__name__)(q, i): + func = getattr(self, '_on_'+e.__class__.__name__, lambda q, i: []) + for q1 in func(q, i): for q2 in self._addq(q1): yield q2 self.pop() @@ -53,16 +54,14 @@ class QueryGenerator(list): val = re_map.get(ename) if val is not None: q[i] = val + yield q break - else: - print('geen waarde gevonden voor:') - print(self[-1]) - print(q[:i+1]) - print(i, len(self), self) - print(self.regex_map) - assert 0 - - yield q + # else: + # print('geen waarde gevonden voor:') + # print(self[-1]) + # print(q[:i+1]) + # print(i, len(self), self) + # print(self.regex_map) def _on_Token(self, q, i): q[i] = q[i]._token @@ -137,73 +136,3 @@ class QueryGenerator(list): q[i] = e1 yield q - - def _on_This(self, q, i): - pass - - -if __name__ == '__main__': - import sys - from k_map import k_map - sys.path.append('../../grammar/') - from pygrammar.grammar import SiriGrammar # nopep8 - - qb = Querybouwer({ - 'regex_map': k_map, - 'max_list_n_map': { - 'series_match': 1, - 'aggregate_functions': 1, - 'select_aggregate': 1 - }, - 'default_list_n': 2, - 'replace_map': { - 'k_prefix': '', - 'k_suffix': '', - 'k_where': '', - 'after_expr': '', - 'before_expr': '', - 'between_expr': '', - 'k_merge': '', - 'r_singleq_str': '', - - # 'f_median': '', - # 'f_median_low': '', - # 'f_median_high': '', - 'k_now': '', - 'r_float': '', - 'r_time_str': '', - # 'r_grave_str': '', - # 'f_filter': '', - } - }) - - maps = { - 'replace_map': { - 'select_stmt': '', - # 'list_stmt': '', - # 'count_stmt': '', - # 'drop_stmt': '', - # 'alter_stmt': '', - # 'create_stmt': '', - # 'revoke_stmt': '', - # 'grant_stmt': '', - # 'show_stmt': '', - 'calc_stmt': '', - - # 'k_prefix': '', - # 'k_suffix': '', - # 'k_where': '', - # 'after_expr': '', - # 'before_expr': '', - # 'between_expr': '', - # 'k_merge': '', - # 'k_limit': '', - # 'k_timeit': '', - 'r_comment': '', - 'r_singleq_str': '', - }, 'regex_map': k_map, - } - - qb = Querybouwer(SiriGrammar, maps) - for q in qb.generate_queries(base_ele): - print(q) \ No newline at end of file diff --git a/itest/test_grammar.py b/itest/test_grammar.py index 5d92bed2..ccc9c975 100644 --- a/itest/test_grammar.py +++ b/itest/test_grammar.py @@ -8,6 +8,7 @@ import os import sys from math import nan from testing import default_test_setup +from testing import parse_args from testing import run_test from testing import Server from testing import SiriDB @@ -77,9 +78,6 @@ class TestGrammar(TestBase): async def test_select_stmt(self): qb = QueryGenerator(SiriGrammar, { 'regex_map': k_map, - 'max_list_n_map': { - 'series_match': 1, - 'aggregate_functions': 1}, 'replace_map': { 'k_prefix': '', 'k_suffix': '', @@ -119,7 +117,7 @@ class TestGrammar(TestBase): async def test_alter_stmt(self): qb = QueryGenerator(SiriGrammar, { 'regex_map': k_map, - 'replace_map': {'r_singleq_str': ''}}) + 'replace_map': {'r_singleq_str': '', 'k_now': ''}}) for q in qb.generate_queries('alter_stmt'): if 'set address' in q: continue # kan niet @@ -127,6 +125,8 @@ class TestGrammar(TestBase): continue # kan niet if 'set timezone' in q: continue # zelfde as vorig waarde error + if 'set log_level' in q: + continue # niet nodig maar wel handig om dit te skippen # if 'set name' in q: # continue # zelfde as vorig waarde error if 'group' in q and 'name' in q: @@ -145,6 +145,8 @@ class TestGrammar(TestBase): 'regex_map': k_map, 'replace_map': {'r_singleq_str': ''}}) for q in qb.generate_queries('list_stmt'): + if 'tags' in q: + continue # TODO await self.client0.query(q) async def test_drop_stmt(self): @@ -166,6 +168,44 @@ class TestGrammar(TestBase): 'replace_map': {'r_singleq_str': ''}}) for q in qb.generate_queries('show_stmt'): await self.client0.query(q) + + async def test_all_stmts(self): + qb = QueryGenerator(SiriGrammar, { + 'regex_map': k_map, + 'replace_map': { + 'r_singleq_str': '', + 'r_comment': '', + 'k_timeit': '', + 'select_stmt': '', + 'list_stmt': '', + 'count_stmt': '', + + 'alter_group': '', + #'drop_group': '', + 'alter_server': '', + 'drop_server': '', + 'alter_user': '', + 'drop_user': '', + + #'set_address': '', + #'set_port': '', + 'set_timezone': '', + 'set_log_level': '', # niet nodig maar wel handig om dit te skippen + 'set_expiration_num': '', + 'set_expiration_log': '', + + 'k_prefix': '', + 'k_suffix': '', + 'k_filter': '', + #'k_where': '', + 'after_expr': '', + 'before_expr': '', + 'between_expr': '', + 'k_merge': '', + }}) + for q in qb.generate_queries(): + print(q) + await self.client0.query(q) @default_test_setup(1) async def run(self): @@ -178,13 +218,15 @@ class TestGrammar(TestBase): series = gen_simple_data(20, 70) await self.client0.insert(series) + await self.client0.query('create group `GROUP_OR_TAG` for /00000.*/') # await self.client0.query('create group `GROUP` for /.*/') - + # await self.client0.query('create user "USER" set password "PASSWORD"') + await self.test_create_stmt() time.sleep(2) - await self.test_select_stmt() + # await self.test_select_stmt() await self.test_revoke_stmt() @@ -202,12 +244,27 @@ class TestGrammar(TestBase): self.client0.close() + print('.') return False + # @default_test_setup(1) + # async def run(self): + # await self.client0.connect() + + # # await self.db.add_pool(self.server1, sleep=2) + + # update_k_map_show(await self.client0.query('show')) + + # series = gen_simple_data(20, 70) + + # await self.client0.insert(series) + # await self.client0.query('create group `GROUP_OR_TAG` for /00000.*/') + # #time.sleep(2) + # await self.test_all_stmts() + # self.client0.close() + # return False + if __name__ == '__main__': - SiriDB.LOG_LEVEL = 'CRITICAL' - Server.HOLD_TERM = True - Server.MEM_CHECK = True - Server.BUILDTYPE = 'Debug' - run_test(TestGrammar()) + parse_args() + run_test(TestGrammar()) \ No newline at end of file diff --git a/itest/testing/constants.py b/itest/testing/constants.py index 2f65c700..e9c81aaa 100644 --- a/itest/testing/constants.py +++ b/itest/testing/constants.py @@ -1,4 +1,5 @@ TEST_DIR = './testdir' +PYGRAMMAR_PATH = '../grammar' SIRIDBC = '../{BUILDTYPE}/siridb-server' SERVICE = '/usr/local/bin/siridb-admin' VALGRIND = 'valgrind' \ -- 2.30.2